from django.shortcuts import render
from rest_framework.views import APIView
from libs.captcha.captcha import captcha
from django_redis import get_redis_connection
from . import constants
from django.http import HttpResponse
# Create your views here.
# 验证码 和 短信验证码的 2个接口


# APIView
#GenericAPIView
#ListAPIView,CreateAPIView

# 因为我没有用到序列化器,所以继承自APIView
class RegisterImageCodeView(APIView):
    """
    GET /verifications/imagecodes/(?P<image_code_id>.+)/
    image_code_id 是作为 判断 用户 输入的时候 查询 redis的依据
    image_code_id js生成的

    """""

    def get(self, request,image_code_id):
        """
        通过第三方库,生成图片和验证码,我们需要对验证码进行redis保存

        思路为:
        创建图片和验证码
        通过redis进行保存验证码,需要在设置中添加 验证码数据库选项
        将图片返回
        """""
        # 1.创建图片和验证码
        text,image = captcha.generate_captcha()

        # 2.通过redis进行保存验证码

        """
        django-redis提供了get_redis_connection的方法，通过调用get_redis_connection方法
        传递redis的配置名称可获取到redis的连接对象，通过redis连接对象可以执行redis命令。
        """
        # 传入 settings中的一个别名就可以
        redis_conn = get_redis_connection('code')

        # 设置短信验证码60s有效期
        # redis_conn.setex('img_%s'%image_code_id,60,text)
        redis_conn.setex('img_%s'%image_code_id,constants.IMAGE_EXPIRE_TIME,text)

        # 3.返回图片
        # 注意,图片是二进制,我们通过HttpResponse返回
        return HttpResponse(image,content_type='image/jpeg')

